#include <stddef.h> // 为了使用 size_t 类型


// void *	 memcpy (void *__restrict, const void *__restrict, size_t);
void *memcpy(void *dest, const void *src, size_t n) 
{
    // 将 void* 类型的指针转换为 char* 类型的指针
    char *d = (char *)dest;
    const char *s = (const char *)src;

    // 逐字节复制数据
    while (n--) 
    {
        *d++ = *s++;
    }

    // 返回目标地址
    return dest;
}

#include <stddef.h> // 为了使用 size_t 类型

void *memset(void *s, int c, size_t n) 
{
    // 将 void* 类型的指针转换为 char* 类型的指针
    unsigned char *p = (unsigned char *)s;

    // 将指定值转换为 unsigned char 类型
    unsigned char value = (unsigned char)c;

    // 逐字节设置内存块的内容
    while (n--) {
        *p++ = value;
    }

    // 返回修改后的内存块地址
    return s;
}

#include <stddef.h> // 为了使用 size_t 类型

int memcmp(const void *s1, const void *s2, size_t n) {
    const unsigned char *p1 = (const unsigned char *)s1;
    const unsigned char *p2 = (const unsigned char *)s2;

    // 逐字节比较两个内存块
    while (n--) {
        if (*p1 != *p2) {
            return *p1 - *p2; // 返回差异
        }
        p1++;
        p2++;
    }

    // 如果所有比较字节都相同，返回0
    return 0;
}